package br.com.labdesenvolvimento.dataaccessobject;

import br.com.labdesenvolvimento.core.BaseDAO;
import br.com.labdesenvolvimento.core.BaseTO;
import br.com.labdesenvolvimento.core.DataBase;
import br.com.labdesenvolvimento.transferobject.ProdutoTO;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Guilherme Hübner Franco
 */
public class ProdutoDAO extends BaseDAO {

    @Override
    public void insert(Connection c, BaseTO t) throws Exception {
        String sql = " insert into Produtos (Id, VendedorId, Preco, Nome, Descricao, VendedorNome) values (?, ?, ?, ?, ?, ?) ";

        ProdutoTO produtoTO = (ProdutoTO) t;

        List<Object> p = new ArrayList<>();

        p.add(produtoTO.getId());
        p.add(produtoTO.getVendedorId());
        p.add(produtoTO.getPreco());
        p.add(produtoTO.getNome());
        p.add(produtoTO.getDescricao());
        p.add(produtoTO.getVendedorNome());

        DataBase.executeUpdate(c, sql, p);
    }

    @Override
    public void update(Connection c, BaseTO t) throws Exception {
        String sql = " update Produtos set VendedorId = ?, Preco = ?, Nome = ?, Descricao = ?, VendedorNome = ? where Id = ?";

        ProdutoTO produtoTO = (ProdutoTO) t;

        List<Object> p = new ArrayList<>();

        p.add(produtoTO.getVendedorId());
        p.add(produtoTO.getPreco());
        p.add(produtoTO.getNome());
        p.add(produtoTO.getDescricao());
        p.add(produtoTO.getVendedorNome());
        p.add(produtoTO.getId());

        DataBase.executeUpdate(c, sql, p);
    }

    @Override
    public void delete(Connection c, BaseTO t) throws Exception {
        String sql = " delete from Produtos where Id = ? ";

        ProdutoTO produtoTO = (ProdutoTO) t;

        List<Object> p = new ArrayList<>();
        p.add(produtoTO.getId());

        DataBase.executeUpdate(c, sql, p);
    }

    @Override
    public BaseTO get(Connection c, BaseTO t) throws Exception {
        String sql = " select Id, VendedorId, Preco, Nome, Descricao, VendedorNome from Produtos where id = ? ";

        ResultSet rs = null;

        try {
            ProdutoTO produtoTO = (ProdutoTO) t;

            rs = DataBase.executeQuery(c, sql, produtoTO.getId());

            if (rs.next()) {
                return new ProdutoTO(rs);
            } else {
                return null;
            }

        } finally {
            if (rs != null) {
                rs.close();
            }
        }
    }

    @Override
    public List<BaseTO> list(Connection c) throws Exception {
        List<BaseTO> list = new ArrayList<>();

        String sql = " select Id, VendedorId, Preco, Nome, Descricao, VendedorNome from Produtos ";

        ResultSet rs = null;

        try {
            rs = DataBase.executeQuery(c, sql);

            while (rs.next()) {
                ProdutoTO to = new ProdutoTO(rs);
                list.add(to);
            }
        } finally {
            if (rs != null) {
                rs.close();
            }
        }

        return list;
    }
}
